Скачиваешь этот файл: xgm.guru/files/100/179980/comments/336580/War3Patch.txt
Далее открываешь архив War3Patch.mpq в редакторе mpq (например Ladik's MPQ Editor) и используешь файл в качестве listfile.
Модель будет лежать по этому пути: Units\Creeps\HeroTinker\HeroTinker.mdx
Без явных доказательств принадлежности этого аккаунта - никак. Есть есть, то просьба обратиться в личку или через форму обратной связи (с указание контактного почтового адреса)
А может ли быть дело не в триггерах, а к примеру в моделях? Кто нибудь когда нибудь сталкивался с фризами из-за используемых моделей?
Это звучит глупа... Фризы из-за модели...
Тем не менее, попробовал удалить весь импорт из карты (около 6 МБ, 157 файлов mdx). Лаги и фризы прекратились. Сейчас дихотомией пробую найти проблемную модель. Хотя может проблемная модель и не одна, или например может быть накапливаемый эффект, который так не найти.
Сильно уменьшил число лагов, избавившись от двух моделей. Эти модели ещё и сами по себе вели себя странно. В частности, фундамент из модели Домика произвольно прикреплялся к анимациям других моделей. А модель Академии иногда меняла свой видимый масштаб без причины.
сорян за некропост, но дам ответ на данный вопрос, т.к. появились нужные знания
эта функция утечна на 1.26, а точнее сам локальный звук, поэтому лучше юзать глобалки заготовленные и ресайкл систему, но там настолько ущербная утечка, что её можно и проигнорить в принципе
Пока юнит разлагается и ты видишь на земле труп, юнит занимает место в памяти, если же юнит разложился -то его уже нет и память он не занимает.
Разумеется в картах типа товер дефенсов имеет смысл сокращать время сокращения или делать суммонами, чтобы после смерти они исчезали не оставляя трупы - вспомните что происходит с духами волков после их убийства. Но тут палка о двух концах, юниты могут наносить урон и убивать других юнитов - так вот если какой нить самон плюнет во врага и сдохет, а тычка долетит до цели через некоторое время и убьет - убивший юнит будет равен null, в доте есть такой баг, змейки веномансера имеют ядовитую атаку и часто обеспечивают суецид врагам, не давая бабки за фраг их хозяину.
Ну я сегодня за кэпа, обьясню вкратце: Утечки - это необнуленные переменные и всякий прочий темпо-мусор, который засоряет собой оперативку игры.
Многие функции ГУИ(триггеров) содержат в себе незначительные утечки - к примеру всякие математические функции, некоторые же содержат значительные утечки - например, функция "двигать в точку" создает целый обьект "локация", который там и остается, а по хорошему должен быть удален.
Обычно, это все не важно, если ты не создаешь сложных триггеров с малым интервалом. Например, у тебя есть способность "блинк", которая триггерно двигает юнита в точку - от такой способности не создастся так много точек, что у тебя начнет тормозить игра, даже за час непрерывного спама.
А вот если у тебя есть способность, которая двигает юнита таким образом каждые 0.01 сек (в течение 1 секунды он плавно летит, к примеру) - то тут лучше бы за собой убирать.
Когда ты поймешь насколько утечные ГУИ функции, ты начнешь постепенно переходить на Джасс, а когда ты поймешь насколько много текста на джассе ты должен напечатать даже для того чтобы просто нанести урон в области и навесить эффект - на этом моменте тебе расхочется делать карты.)
Ваш ресурс не прошёл автомодерацию. Пожалуйста, внесите исправления или ожидайте проверки модератором.
Причина
Должен присутствовать файл одного из типов: exe, bat, msi, apk, cmd, com, csh, ipa, ksh, osx, out, paf, ps1, run, zip, 7z, rar, tar, gz, gzip, jar, lzip, tgz, tbz2, bz2, zipx, zz, dmg, ipg, z, iso
Your resource has not passed automoderation. Please make corrections or wait for the moderator to check.
Reason
There must be a file of one of the following types: exe, bat, msi, apk, cmd, com, csh, ipa, ksh, osx, out, paf, ps1, run, zip, 7z, rar, tar, gz, gzip, jar, lzip, tgz, tbz2, bz2, zipx, zz, dmg, ipg, z, iso
Бордер, xgm.guru/p/wc3/various_textures
Ищи через гугл "xgm.guru [то, что тебе надо]", это имхо удобнее местного поиска, да
Только имхо это все равно не оч:
многовато геморроя
способ подразумевает каст дамми абилки, а это опять же срабатывания всяких "юнит кастит абилку" и бла-бла-бла
ну и хотя мелочь - баг после сейва, он там описан
проще тупо несколько юнитов с разными текстурами сделать и смириться с кол-вом занимаемого места и/или необходимостью прелоада, зато всё будет шито-крыто
Ну вылет у тебя на функции, которая занимается отрисовкой графики. Она универсальная, там и частицы обрабатываются, и поверхности. Так что ошибка явно в модели, а какой и как - хрен его знает
Триггерно. Ловишь событие применения предмета, даешь скрытую в спэллбуке способность змеиная ловкость, подрубаешь таймер, по истечению таймера удаляешь способность.
У меня не вопроизводится. Попробовал по-разному - и с новыми комментами, и с текущими. И в репосте и в оригинале.
Если будет возможность уточнить шаги воспроизведения - переоткрывай.
По мемхаку 127b из всех кого я знаю, может помочь только quq_CCCP, но не уверен что он сможет в поиск оффсетов.
Есть способ попробовать по аналогии с 126 патчем искать оффсеты, и как научитесь то в 127 скорее всего так же будет.
В целом тот мемхак, который работает на 127b я видел только изменение брони и всё.. Я не сильно в этом уверен, но кажется, что ничего не выйдет путнего =(
После удаления этой кнопки лично у меня вылетов больше не было. Может багованная модель или попкорновский эффект, а может триггер, который на ней висит, хз.
Попробуй выделить весь декор и поднять с помощью CTRL+PageUp, авось с отриательной z работать не хотит.
На кнопке поднятие попробовал, всё равно вылетает
Updt. Снёс всё попкорн эмиттеры с модели кнопки, и переимпортировал в карту. Вроде работает
в рефе в менеджере импорта появилась новое поле HD /SD импортируем обе модели, называем одинакого, а в списке переключаем версию графики, всё, этого достаточно.
Если вы каким то чудом не работаете в редакторе то в режиме папки у вас будет _HD.w3mod туда кидаете все HD модели, а sd модели в корень, разумеется имена должны полностью повторяться, если подели лежат в подпапке, то должно быть _HD.w3mod\models\model.mdx для HD версии и в корне игры должно быть так, models\model.mdx для SD модели
Насколько я понял, тебе нужно просто сменить текстуру. Для этого тебе по меньшей мере нужна текстура. Можно взять либо стандартную, либо создать самому (что довольно просто, если знать как).
Чтобы создать текстуру, возьми любое изображение, открой его в ФШ и сохрани как tga 32 бит с размером до 512х512 (вроде бы можно делать любой размер, не превышающий 1024х768, но я советую сохранять пропорции и делать размер не больше 512х512, или кратных половине этого числа (256/128/64/32) , за тем открой в War3 Image Extractor и переведи формат tga в blp. Потом открываешь модельку - редактор текстур и переименовываешь нужную текстуру в ту которая тебе нужна (они должны быть в одной папке) жмешь - Enter - .
Объясню, почему я удалил код: после проведённого за кодом времени, я понял, что сильно погорячился, задав такой глупый вопрос. Стоило отдохнуть, проветрить голову, и решение нашлось. Тем, кто столкнулся с хоть самую малость, но похожей проблемой, дам совет: всегда проверяйте соответствия заклинаний, написанных в коде jass (CTRL + D, если кто не знает, как узнать id заклинания) и ,конечно, сам синтаксис. Также посоветую не утраивать "свалку" в коде, как это сделал я. В общем, если кому интересно, как я решил проблему, пишите - расскажу или даже помогу если у вас она схожая.(Всё дело во внимательности)...
Сброшу код триггера таким, каким я его хотел видеть изначально:
function MU_Check_lvl_four takes nothing returns boolean
if ( not ( GetUnitAbilityLevelSwapped('A011', udg_Akame_Killer) == 4 ) ) then
return false
endif
return true
endfunction
function MU_Check_lvl_three takes nothing returns boolean
if ( not ( GetUnitAbilityLevelSwapped('A011', udg_Akame_Killer) == 3 ) ) then
return false
endif
return true
endfunction
function MU_Check_lvl_two takes nothing returns boolean
if ( not ( GetUnitAbilityLevelSwapped('A011', udg_Akame_Killer) == 2 ) ) then
return false
endif
return true
endfunction
function MU_Check_lvl_one takes nothing returns boolean
if ( not ( GetUnitAbilityLevelSwapped('A011', udg_Akame_Killer) == 1 ) ) then
return false
endif
return true
endfunction
function MU_Second_Conditions takes nothing returns boolean
if ( not ( UnitHasBuffBJ(GetEventDamageSource(), 'B008') == true ) ) then
return false
endif
if ( not ( GetEventDamageSource() == udg_Akame_Killer ) ) then
return false
endif
return true
endfunction
function MU_Start_Conditions takes nothing returns boolean
if ( not ( UnitHasBuffBJ(GetAttacker(), 'B008') == true ) ) then
return false
endif
if ( not ( GetAttacker() == udg_Akame_Killer ) ) then
return false
endif
return true
endfunction
function Trig_MU_Conditions takes nothing returns boolean
if ( not MU_Start_Conditions() ) then
return false
endif
return true
endfunction
function MU_Venum_Check takes nothing returns boolean
if ( not ( udg_MU_Venum_counter == 2 ) ) then
return false
endif
return true
endfunction
function MU_del takes nothing returns nothing
if ( MU_Check_lvl_one() ) then
call SetPlayerAbilityAvailableBJ( true, 'A00X', GetOwningPlayer(GetEventDamageSource()) )
call UnitRemoveAbilityBJ( 'A00X', GetEventDamageSource() )
else
if ( MU_Check_lvl_two() ) then
call SetPlayerAbilityAvailableBJ( true, 'A00U', GetOwningPlayer(GetEventDamageSource()) )
call UnitRemoveAbilityBJ( 'A00U', GetEventDamageSource() )
else
if ( MU_Check_lvl_three() ) then
call SetPlayerAbilityAvailableBJ( true, 'A00Y', GetOwningPlayer(GetEventDamageSource()) )
call UnitRemoveAbilityBJ( 'A00Y', GetEventDamageSource() )
else
if ( MU_Check_lvl_four() ) then
call SetPlayerAbilityAvailableBJ( true, 'A013', GetOwningPlayer(GetEventDamageSource()) )
call UnitRemoveAbilityBJ( 'A013', GetEventDamageSource() )
else
call DoNothing( )
endif
endif
endif
endif
endfunction
function Trig_MU_Actions takes nothing returns nothing
call DestroyTrigger(udg_MU_trig)
set udg_MU_Venum_counter = GetRandomInt(1, 5)
set udg_MU_TG = GetAttackedUnitBJ()
if ( MU_Venum_Check() ) then
if ( MU_Check_lvl_one() ) then
call UnitAddAbilityBJ( 'A00X', udg_Akame_Killer )
call SetPlayerAbilityAvailableBJ( false, 'A00X', GetOwningPlayer(udg_Akame_Killer) )
else
if ( MU_Check_lvl_two() ) then
call UnitAddAbilityBJ( 'A00U', udg_Akame_Killer )
call SetPlayerAbilityAvailableBJ( false, 'A00U', GetOwningPlayer(udg_Akame_Killer) )
else
if ( MU_Check_lvl_three() ) then
call UnitAddAbilityBJ( 'A00Y', udg_Akame_Killer )
call SetPlayerAbilityAvailableBJ( false, 'A00Y', GetOwningPlayer(udg_Akame_Killer) )
else
if ( MU_Check_lvl_four() ) then
call UnitAddAbilityBJ( 'A013', udg_Akame_Killer )
call SetPlayerAbilityAvailableBJ( false, 'A013', GetOwningPlayer(udg_Akame_Killer) )
else
call DoNothing( )
endif
endif
endif
endif
set udg_MU_trig = CreateTrigger()
call TriggerRegisterUnitEvent( udg_MU_trig, udg_MU_TG, EVENT_UNIT_DAMAGED )
call TriggerAddCondition( udg_MU_trig, Condition( function MU_Second_Conditions ) )
call TriggerAddAction( udg_MU_trig, function MU_del )
else
call DoNothing( )
endif
endfunction
//===========================================================================
function InitTrig_MU takes nothing returns nothing
set gg_trg_MU = CreateTrigger( )
call TriggerRegisterAnyUnitEventBJ( gg_trg_MU, EVENT_PLAYER_UNIT_ATTACKED )
call TriggerAddCondition( gg_trg_MU, Condition( function Trig_MU_Conditions ) )
call TriggerAddAction( gg_trg_MU, function Trig_MU_Actions )
endfunction
Суть триггера:
Имеется способность с четырьмя уровнями. На каждом уровне урон способности разный, а шанс срабатывания всегда 25%. При атаке герой, имеющий такую способность имеет шанс (25%) на отравление противника.
Переменная udg_Akame_killer равносильна GetEventDamageSource()
P.S. Возможно кому-то даже пригодится этот код... Сделан полнейшим неумехой в плане jass, так что не судите строго!
Событие "применяет способность" произойдет только если вручную нажать на способность ледяной стрелы и на врага. При авто атаках событие работать не будет.
В будущем для проверки таких моментов пользуйтесь дебагом. В данном случае нужно отключить условие и выводить имя юнита тригера, тогда бы вы увидели что когда примнешь способность имя юнита выводится в чат, а когда он автоатачит, то имя не выводится, что означало бы что триггер не срабатывает, не срабатывает событие
В данном примере под владельцем юнита система понимает изначально кому принадлежал юнит. Триггер не работает после того как здание поменяло владельца. Рабочим способом будет сделать условие проверки принадлежности юнита как показано на скриншоте:
Не "триггерный юнит" а "соответствующий юнит" (Matching Unit).
У тебя нет триггерного юнита, ты выбираешь группу с дополнительным условием соответствия, а значит надо использовать соответствующую переменную.
» WarCraft 3 / Скрытые файлы MPQ
» Администрация XGM / Как удалить аккаунт?
» WarCraft 3 / Утечка памяти
» WarCraft 3 / WarDota4
» WarCraft 3 / Меняется патч карты с 1.26 на 1.31
» WarCraft 3 / Чужие модели
» WarCraft 3 / Активность?
» Администрация XGM / Не отображается изображение
» WarCraft 3 / Чтение памяти игры
» WarCraft 3 / Патч игры
» WarCraft 3 / Помогите найти.
» WarCraft 3 / Как сделать стакающиеся атаки?
» WarCraft 3 / HD&SD Reforged
» Администрация XGM / Гифки в превью
» WarCraft 3 / Вопрос по моделькам
» WarCraft 3 / Проверка по баффу
» WarCraft 3 / Не работает триггер